# coding=utf-8
import logging
from goods_info.models import GoodsModel, GoodsInventoryModel
from .models import WarehouseModel
from django.db.models.signals import post_save
from django.dispatch import receiver

# 得到日志输出对象logger（因为写的有）
# 记录日志
logger = logging.getLogger('erp')  # 因为配置文件中只配置了erp和djiang的，所以只能选两个

''' 在不重写的menu的post的基础上，可以直接在写多一个类，方便和节省了几行代码，他是在模型保存后触发的 '''

''' 这里的Django的信号机制就是当调用sender（调用的WarehouseModel模型类）的post_save（新增）的时候就会触发 '''
# 用来接收信号的（把当前的菜单的权限插入进去）
# 加上装饰器才是真正的视图函数
# post_save当通过发送post请求的时候，如果在保存一个菜单的时候就会触发
# sender发送者就是模型类
''' post_save：在模型保存后触发的 '''
@receiver(post_save, sender=WarehouseModel)
def create_goods_inventory_permissions(sender, instance, created, **kwargs):
    '''
    创建信号监控函数
    创建新仓库之后，给所有的货品在当前的新仓库 新增库存数据
    '''
    if created: # 判断是不是新增
        logger.info('创建当前新仓库的所有库存数据--每个商品都要插入对应的库存记录')
        if isinstance(instance,WarehouseModel): # isinstance检验类型，判断instance是不是WarehouseModel（仓库模型类）类型
            # 查询所有货品的ID
            ids = GoodsModel.objects.values_list('id',flat=True).all()
            # 批量插入库存记录数据
            inventory_list = []
            for  goods_id in ids:
                inventory_list.append(
                    GoodsInventoryModel(
                        goods_id=goods_id,
                        warehouse_id=instance.id,
                        warehouse_name=instance.name
                    )
                )
            # 批量新增的函数：bulk_create（bulk_create是批量新增，bulk_update是批量修改）
            GoodsInventoryModel.objects.bulk_create(inventory_list)
        else:
            logger.info('不是WarehouseModel类型，所以不需要创建库存数据')
